
class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        n=len(nums)
        mindist=100000
        for i in range(n-2):
            if i>0 and nums[i]==nums[i-1]:
                continue
            k=i+1
            for j in range(n-1,i+1,-1):
                if j<n-1 and nums[j]==nums[j+1]:
                    continue
                while k<j and nums[i]+nums[j]+nums[k]<target:
                    k+=1
                if abs(nums[i]+nums[j]+nums[k-1]-target)<abs(mindist-target) and k-1!=i:
                    #print(nums[i],nums[k-1],nums[j])
                    mindist=nums[i]+nums[j]+nums[k-1]
                if k==j:
                    break
                if abs(nums[i]+nums[j]+nums[k]-target)<abs(mindist-target):
                    #print(nums[i],nums[k],nums[k])
                    mindist=nums[i]+nums[j]+nums[k]
                    continue
        return mindist
s=Solution()
print(s.threeSumClosest([0,2,1,-3],1))
'''
执行用时：
364 ms
, 在所有 Python3 提交中击败了
8.69%
的用户
内存消耗：
14.9 MB
, 在所有 Python3 提交中击败了
5.28%
的用户
'''


class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        n=len(nums)
        mindist=100000
        for i in range(n-2):
            if i>0 and nums[i]==nums[i-1]:
                continue
            k=i+1
            j=n-1
            while k<j:
                if j<n-1 and nums[j]==nums[j+1]:
                    j-=1
                    continue
                if k>i+1 and nums[k]==nums[k-1]:
                    k+=1
                    continue
                if abs(nums[i]+nums[j]+nums[k]-target)<abs(mindist-target):
                    #print(nums[i],nums[k],nums[k])
                    mindist=nums[i]+nums[j]+nums[k]
                    if mindist-target==0:
                        return mindist
                    continue
                if nums[i]+nums[j]+nums[k]>target:
                    j-=1
                    continue
                elif nums[i]+nums[j]+nums[k]<target:
                    k+=1
                    continue
        return mindist

'''
执行用时：
108 ms
, 在所有 Python3 提交中击败了
69.44%
的用户
内存消耗：
14.8 MB
, 在所有 Python3 提交中击败了
5.28%
的用户
'''